<?php 
require_once(dirname(dirname(__FILE__)).'/libs/db.class.php');
class User{
    public $db;
    function __construct()
    {
        $this->db = new DB();
    }

    function index(){
        $output=['errcode'=>0,'msg'=>'success'];
        echo json_encode($output);
    }

    // 登录验证
    function login(){
        $output=['errcode'=>0,'msg'=>'success'];
        if(!empty($_POST)){
            $username=$_POST['username'];
            $password=md5($_POST['password']);
            $sql="select id,username,password from users where username='{$username}' and password='{$password}'";
            $user=$this->db->get_one($sql);
            if(empty($user)){
                $output['errcode']=1;
                $output['msg']='用户名或密码错误';
            }else{
                $output['msg']='登录成功';
                $crypt=['id'=>$user['id'],'username'=>$user['username']];
                // 作为登录凭证, 客户端需要存储在cookie中
                $output['token']=base64_encode(json_encode($crypt));
            }

        }else{
            $output['errcode']=2;
            $output['msg']='参数错误';
        }
        echo json_encode($output);
    }
    // 注册
    function reg(){
        $output=['errcode'=>0,'msg'=>'success'];
        if(!empty($_POST)){
            $data=$_POST;
            $unique=$this->check_user_unique($data['username']);
            if(!$unique){
                $output['errcode']=1;
                $output['msg']='用户名不可用';
            }else{
                $username=$data['username'];
                $password=md5($data['password']);
                $sql="insert into users set username='{$username}',password='{$password}'";
                $res=$this->db->query($sql);
                if($res){
                    $output['msg']='账号注册成功';
                }else{
                    $output['msg']='账号注册失败';
                }
            }   
           
        }else{
            $output['errcode']=1;
            $output['msg']='请使用post方式提交';
        }
        echo json_encode($output);
    }

    // 密码重置: 必须登录后才能重置密码
    function reset_pwd(){
        $output=['errcode'=>0,'msg'=>'success'];
        if($_POST){
            $is_login=$this->is_login();
            if(!$is_login){
                $output['errcode']=1;
                $output['msg']='未登录状态, 不能进行重置密码操作';
            }else{
                $user_id=$is_login['id'];
                $password=md5($_POST['password']);
                $sql="update users set password='{$password}' where id={$user_id}";
                $res=$this->db->query($sql);
                if($res){
                    $output['msg']='重置密码成功';
                }else{
                    $output['errcode']=1;
                    $output['msg']='重置密码失败';
                }
            }
        }else{
            $output['errcode']=2;
            $output['msg']='参数错误';
        }
        echo json_encode($output);
    }


    // 更新用户信息
    function update_info(){
        $output=['errcode'=>0,'msg'=>'success'];
        if($_POST){
            if(isset($_POST['nickname'])){
                $data['nickname']=$_POST['nickname'];
            }

            if(isset($_POST['tel'])){
                $data['tel']=$_POST['tel'];
            }
            if(isset($_POST['email'])){
                $data['email']=$_POST['email'];
            }

            if(isset($_POST['motto'])){
                $data['motto']=$_POST['motto'];
            }

            if(isset($_POST['avatar'])){
                $data['avatar']=$_POST['avatar'];
            }
        
            $query_str=$this->arr2str($data);

            $is_login=$this->is_login();
            if(!$is_login){
                $output['errcode']=1;
                $output['msg']='未登录状态, 不能进行该操作';
            }else{
                $user_id=$is_login['id'];
                $sql="update users set {$query_str} where id={$user_id}";
                $res=$this->db->query($sql);
                if($res){
                    $output['msg']='信息更新成功';
                }else{
                    $output['errcode']=3;
                    $output['msg']='信息更新失败';
                }
            }
        }else{
            $output['errcode']=2;
            $output['msg']='参数错误';
        }
        echo json_encode($output);
    }

  
    function logout(){
        $output=['errcode'=>0,'msg'=>'success'];
        echo json_encode($output);
    }


    // 获取登录用户的信息
    function login_info(){
        $output=['errcode'=>0,'msg'=>'success'];
        $res=$this->is_login();
        if(!$res){
            $output['errcode']=1;
            $output['msg']='未登录, 请先登录';    
        }else{
            $output['userInfo']=$res;
        }   
        echo  json_encode($output);
    }


    // 检测用户是否登录
    private function is_login(){
        // $token=$_COOKIE['Token'];
        $token=getallheaders()['Token'];
        // 从token中解密用户信息
        $user=json_decode(base64_decode($token),true);
        $sql="select id,username,nickname,avatar,tel,email,motto from users where id={$user['id']}";
        $res=$this->db->get_one($sql);
        if(!empty($res)){
            return $res;
        }else{
            return false;
        }   
    }



    // 校验用户名是否唯一
    private function check_user_unique($username){
        $sql="select id,username from users where username='{$username}'";
        $res=$this->db->get_one($sql);
        if(empty($res)){
            // 用户名可用
            return true;
        }else{
            // 用户名不可用
            return false;
        }
    }


    // 将数组转换成查询字符串
    private function arr2str($arr){
        $str='';
        foreach($arr as $key=>$val){
            $str.=$key.'="'.$val.'",';
        }
        return substr($str,0,-1);
    }


}
